package com.powernode.driver.service.impl;

import com.powernode.driver.client.CiFeignClient;
import com.powernode.driver.service.FileService;
import com.powernode.driver.service.MonitorService;
import com.powernode.model.entity.order.OrderMonitor;
import com.powernode.model.entity.order.OrderMonitorRecord;
import com.powernode.model.form.order.OrderMonitorForm;
import com.powernode.model.vo.order.TextAuditingVo;
import com.powernode.order.client.OrderMonitorFeignClient;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

/**
 * 监控服务实现类
 * 负责处理监控相关的业务逻辑，如文件上传和监控记录保存
 */
@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class MonitorServiceImpl implements MonitorService {
    @Resource
    private FileService fileService; // 文件上传服务，用于处理文件上传操作
    @Resource
    private OrderMonitorFeignClient orderMonitorFeignClient; // 订单监控服务Feign客户端，用于远程调用订单监控服务
    @Resource
    private CiFeignClient ciFeignClient;//腾讯云CI审核服务Feign客户端，用于远程调用腾讯云CI审核服务

    /**
     * 上传监控文件并保存监控记录
     *
     * @param file             要上传的文件
     * @param orderMonitorForm 订单监控表单，包含订单ID和监控内容等信息
     * @return 操作是否成功
     */
    @Override
    public Boolean upload(MultipartFile file, OrderMonitorForm orderMonitorForm) {
        // 调用文件服务上传文件，获取文件URL
        String url = fileService.upload(file);
        // 创建订单监控记录对象
        OrderMonitorRecord orderMonitorRecord = new OrderMonitorRecord();
        // 设置订单ID
        orderMonitorRecord.setOrderId(orderMonitorForm.getOrderId());
        // 设置文件URL
        orderMonitorRecord.setFileUrl(url);
        // 设置监控内容
        orderMonitorRecord.setContent(orderMonitorForm.getContent());
        // 调用腾讯云CI审核服务审核文本
        TextAuditingVo textAuditingVo = ciFeignClient.textAuditing(orderMonitorForm.getContent()).getData();
        // 设置审核结果
        orderMonitorRecord.setResult(textAuditingVo.getResult());
        // 设置风险关键词
        orderMonitorRecord.setKeywords(textAuditingVo.getKeywords());
        // 调用远程服务保存监控记录
        orderMonitorFeignClient.saveMonitorRecord(orderMonitorRecord);
        // 调用远程服务获取订单监控信息
        OrderMonitor orderMonitor = orderMonitorFeignClient.getOrderMonitor(orderMonitorForm.getOrderId()).getData();
        // 增加文件数量
        int fileNum = orderMonitor.getFileNum() + 1;
        // 增加审核数量
        orderMonitor.setFileNum(fileNum);
        //审核结果: 0（审核正常），1 （判定为违规敏感文件），2（疑似敏感，建议人工复核）。
        if("3".equals(orderMonitorRecord.getResult())) {
            // 增加审核数量
            int auditNum = orderMonitor.getAuditNum() + 1;
            orderMonitor.setAuditNum(auditNum);
        }
        // 调用远程服务更新订单监控信息
        orderMonitorFeignClient.updateOrderMonitor(orderMonitor);
        // 返回操作成功
        return true;
    }
}
